<?php
namespace app\api\controller\address;

// 底层控制器
use think\Controller;

//引入cookie
use think\Cookie;

class Address extends Controller {
    // 构造函数

    public function __construct() {
        // 手动把父类的方法获取过来
        parent::__construct();

        $this->UserModel = model( 'User.User' );
        $this->AddressModel = model( 'User.Address' );
        $this->RegionModel = model( 'Region' );
    }

    // 获取收货地址信息列表

    public function index() {
        if ( $this->request->isPost() ) {
            $userid = $this->request->param( 'userid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 获取用户的收货地址信息
            $result = $this->AddressModel->with( [ 'provinces', 'citys', 'districts' ] )->where( [ 'userid' => $userid ] )->select();

            $this->success( '返回收货地址成功', null, $result );
            exit;
        }
    }

    // 添加收货地址

    public function add() {
        if ( $this->request->isPost() ) {
            $params = $this->request->param();
            $userid = $this->request->param( 'userid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 组转数据
            $data = [
                'consignee' => $params[ 'consignee' ],
                'mobile' => $params[ 'mobile' ],
                'address' => $params[ 'address' ],
                'status' => $params[ 'status' ],
                'userid' => $userid,
            ];

            // 查询地区数据
            $parentpath = $this->RegionModel->where( [ 'code' => $params[ 'code' ] ] )->value( 'parentpath' );

            if ( empty( $parentpath ) ) {
                $this->error( '您所选的地区不存在，请重新选择' );
                exit;
            }

            // 将字符串转换为数组
            $path = explode( ',', $parentpath );

            if ( count( $path ) <= 0 ) {
                $this->error( '您所选的地区不存在，请重新选择' );
                exit;
            }

            // 将数组里面的值分别给不同的变量
            list( $data[ 'province' ], $data[ 'city' ], $data[ 'district' ] ) = $path;

            // 判断是否选择了默认地址
            if ( $params[ 'status' ] == 1 ) {
                // 若选择了默认的地址，其他的地址要变成非默认地址
                $UpdateStatus = $this->AddressModel->where( [ 'userid' => $params[ 'userid' ] ] )->update( [ 'status' => 0 ] );

                if ( $UpdateStatus === false ) {
                    $this->error( '更改默认收货地址失败！' );
                    exit;
                }
            }

            // 插入数据库
            $result = $this->AddressModel->validate( 'common/User/Address' )->save( $data );

            if ( $result === false ) {
                $this->error( $this->AddressModel->getError() );
                exit;
            } else {
                $this->success( '添加收货地址成功!' );
                exit;
            }
        }
    }

    // 收货地址的详情

    public function info() {
        if ( $this->request->isPost() ) {
            $userid = $this->request->param( 'userid', 0 );
            $addressid = $this->request->param( 'id', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            $addressInfo = $this->AddressModel->with( [ 'provinces', 'citys', 'districts' ] )->find( $addressid );

            if ( $addressInfo === false ) {
                $this->error( $this->AddressModel->getError() );
                exit;
            } else {
                $this->success( '获取收货地址成功！', null, $addressInfo );
                exit;
            }
        }
    }

    // 修改收货地址

    public function edit() {
        if ( $this->request->isPost() ) {
            $params = $this->request->param();
            $userid = $this->request->param( 'userid', 0 );
            $addressid = $this->request->param( 'id', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 组转数据
            $data = [
                'id' => $addressid,
                'consignee' => $params[ 'consignee' ],
                'mobile' => $params[ 'mobile' ],
                'address' => $params[ 'address' ],
                'status' => $params[ 'status' ],
                'userid' => $userid,
            ];

            // 查询地区数据
            $parentpath = $this->RegionModel->where( [ 'code' => $params[ 'code' ] ] )->value( 'parentpath' );

            if ( empty( $parentpath ) ) {
                $this->error( '您所选的地区不存在，请重新选择' );
                exit;
            }

            // 将字符串转换为数组
            $path = explode( ',', $parentpath );

            if ( count( $path ) <= 0 ) {
                $this->error( '您所选的地区不存在，请重新选择' );
                exit;
            }

            // 将数组里面的值分别给不同的变量
            list( $data[ 'province' ], $data[ 'city' ], $data[ 'district' ] ) = $path;

            // 判断是否选择了默认地址
            if ( $params[ 'status' ] == 1 ) {
                // 若选择了默认的地址，其他的地址要变成非默认地址
                $UpdateStatus = $this->AddressModel->where( [ 'userid' => $params[ 'userid' ] ] )->update( [ 'status' => 0 ] );

                if ( $UpdateStatus === false ) {
                    $this->error( '更改默认收货地址失败！' );
                    exit;
                }
            }

            // 更新数据库
            $result = $this->AddressModel->validate( 'common/User/Address' )->isUpdate()->save( $data );

            if ( $result === false ) {
                $this->error( $this->AddressModel->getError() );
                exit;
            } else {
                $this->success( '修改收货地址成功!' );
                exit;
            }
        }
    }

    // 删除收货地址

    public function del() {
        if ( $this->request->isPost() ) {
            $userid = $this->request->param( 'userid', 0 );
            $addressid = $this->request->param( 'addressid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 获取收货地址信息
            $addressInfo = $this->UserModel->find( $addressid );

            // 当没有找到收货地址
            if ( !$addressInfo ) {
                $this->error( '收货地址不存在' );
                exit;
            }

            // 更新数据库
            $result = $this->AddressModel->destroy( $addressid );

            if ( $result === false ) {
                $this->error( $this->AddressModel->getError() );
                exit;
            } else {
                $this->success( '删除成功!' );
                exit;
            }
        }
    }

    // 切换默认地址

    public function check() {
        if ( $this->request->isPost() ) {
            $userid = $this->request->param( 'userid', 0 );
            $addressid = $this->request->param( 'addressid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 获取收货地址信息
            $addressInfo = $this->AddressModel->find( $addressid );

            // 当没有找到收货地址
            if ( !$addressInfo ) {
                $this->error( '收货地址不存在' );
                exit;
            }

            // 判断是不是本人修改本人的地址
            if ( $userid != $addressInfo[ 'userid' ] ) {
                $this->error( '非法修改他人地址，无权修改' );
                exit;
            }

            // 开启事务
            $this->AddressModel->startTrans();

            $UpdateStatus = $this->AddressModel->where( [ 'userid' => $userid ] )->update( [ 'status' => 0 ] );

            if ( $UpdateStatus === false ) {
                $this->error( '更新默认收货地址失败!' );
                exit;
            }

            // 更新选中的地址
            $result = $this->AddressModel->where( [ 'id' => $addressid ] )->update( [ 'status' => 1 ] );

            if ( $result === false ) {
                // 回滚事务
                $this->AddressModel->rollback();
                $this-error( '更新默认地址失败' );
                exit;
            } else {
                // 提交事务
                $this->AddressModel->commit();
                $this->success( '更新默认地址成功！' );
                exit;
            }

        }
    }

    // 获取默认地址

    public function order() {
        if ( $this->request->isPost() ) {
            $userid = $this->request->param( 'userid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 组装数据
            $data = [
                'userid' => $userid,
                'status' => 1,
            ];

            // 查找这个人的默认地址
            $info = $this->AddressModel->with( [ 'provinces', 'citys', 'districts' ] )->where( $data )->find();

            // 查找到
            if ( $info ) {
                $this->success( '返回默认收货地址', null, $info );
                exit;
            }

            // 若没有查找到，就随便给他一条
            $address = $this->AddressModel->with( [ 'provinces', 'citys', 'districts' ] )->where( [ 'userid' => $userid ] )->find();

            if ( !$address ) {
                $this->error( '暂无收货地址' );
                exit;
            }

            $this->success( '返回默认收货地址', null, $address );
            exit;
        }
    }
}
?>
